export default (function(self) {

    self.prefix = 'local_storage_cache_'

    /**
     * 
     * @param { key } key 
     * @param { value } value 
     * @param { expires } expires 
     */
    self.set = function(key, value, expires = 0) {
        key = prefix + key
        window.localStorage.setItem(key, JSON.stringify({
            val: value,
            expires: expires > 0 ? new Date().getTime() + expires * 1000 : 0
        }))
    },

    /**
     * 
     * @param { key } key 
     * @returns 
     */
    self.get = function(key) {
        key = prefix + key
        const value = window.localStorage.getItem(key)
        if (!value) {
            return null
        }

        const valueObj = JSON.parse(value)
        if (valueObj.expires > 0 && valueObj.expires < new Date().getTime()) {
            window.localStorage.removeItem(key)
            return null
        }

        return valueObj.val
    }

    return self
}(self || {}))


// export default {

//     prefix : 'local_storage_cache_',

//     /**
//      * 
//      * @param { key } key 
//      * @param { value } value 
//      * @param { expires } expires 
//      */
//     set : function(key, value, expires = 0) {
//         key = this.prefix + key
//         window.localStorage.setItem(key, JSON.stringify({
//             val: value,
//             expires: expires > 0 ? new Date().getTime() + expires * 1000 : 0
//         }))
//     },

//     /**
//      * 
//      * @param { key } key 
//      * @returns 
//      */
//     get : function(key) {
//         key = this.prefix + key
//         const value = window.localStorage.getItem(key)
//         if (!value) {
//             return null
//         }

//         const valueObj = JSON.parse(value)
//         if (valueObj.expires > 0 && valueObj.expires < new Date().getTime()) {
//             window.localStorage.removeItem(key)
//             return null
//         }

//         return valueObj.val
//     }
// }